package com.clarence.dada.core.auth.entity;


import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.clarence.dada.core.auth.entity.basic.SimpleRoleInfo;
import com.clarence.dada.core.auth.entity.basic.SimpleUserInfo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 登录用户信息
 *
 * @author GD
 * @since 2020/10/17 9:58
 */
@Data
public class LoginUser implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 用户主键id
     */
    @Schema(title = "用户主键id", example = "1")
    private Long userId;

    /**
     * 账号
     */
    @Schema(title = "账号", example = "admin")
    private String account;

    /**
     * 超级管理员标识，true-是超级管理员
     */
    @Schema(title = "超级管理员标识，true-是超级管理员", example = "true")
    private Boolean superAdmin;

    /**
     * 用户基本信息
     */
    @Schema(title = "用户基本信息", example = "xxx")
    private SimpleUserInfo simpleUserInfo;

    /**
     * 用户角色信息
     */
    @Schema(title = "用户角色信息", example = "xxx")
    private List<SimpleRoleInfo> simpleRoleInfoList;

    /**
     * 职务信息
     */
    @Schema(title = "职务信息", example = "xxx")
    private Long positionId;

    /**
     * 用户数据范围用户信息
     */
    @Schema(title = "用户数据范围用户信息", example = "xxx")
    private Set<Long> dataScopeUserIds;

    /**
     * 用户数据范围组织信息
     */
    @Schema(title = "用户数据范围组织信息", example = "xxx")
    private Set<Long> dataScopeOrganizationIds;

    /**
     * 可用资源集合
     */
    @Schema(title = "可用资源集合", example = "xxx")
    private Set<String> resourceUrls;

    /**
     * 用户拥有的按钮编码集合
     */
    @Schema(title = "用户拥有的按钮编码集合", example = "xxx")
    private Set<String> buttonCodes;

    /**
     * 用户的token，当返回用户会话信息时候回带token
     */
    @Schema(title = "用户的token，当返回用户会话信息时候回带token", example = "xxx")
    private String token;

    /**
     * 其他信息，Dict为Map的拓展
     */
    @Schema(title = "其他信息，Dict为Map的拓展", example = "xxx")
    private Dict otherInfoList;

    /**
     * 头像url
     */
    @Schema(title = "用户头像url", example = "abc.png")
    private String avatarUrl;

    /**
     * 当前登录用户是否是C端用户（默认不是C端用户）
     */
    @Schema(title = "是否是C端用户", example = "false")
    private Boolean customerFlag = false;

    public LoginUser() {
    }

    public LoginUser(Long userId, String account, String token) {
        this.userId = userId;
        this.account = account;
        this.token = token;
    }

}
